쓰레드 사용은 SYSTEMPROGRAMMING_THREAD 참고
Advantage
1. 사용자에 대한 응답성 향상멀티 프로세스(병렬처리)가 IPC를 통해서 빠른속도로 병렬처리를 하듯 Thread를 통하여서 응답성을 향상시킬 수 있다.
2. 자원 공유 효율
IPC 기법과 같이 프로세스간 자원 공유를 위해 번거로운 작업이 필요 없다.
프로세스 안에 있으므로, 프로세스의 데이터를 모두 접근 가능
(프로세스 하나당 4GB를 차지하지만, 쓰레드는 하나의 프로세스 4GB를 공유한다.)
또한 멀티프로세스에 경우 CPU 레지스터를 초기화 해야하기 때문에 자원이 많이 든다.
3. 작업이 분리되어 코드가 간결-함수로 작성할 수 있어서 이용하기 쉽다.
사실 작성하기 나름
Disadvantage
스레드 중 한 스레드만 문제가 있어도, 전체 프로세스가 영향을 받는다.(멀티 프로세스의 경우, 해당 프로세스만 영향을 받음)
스레드를 많이 생성하면, Context Switching이 많이 발생해서, 성능 저하가 발생
리눅스 OS에서는 Thread를 Process와 같이 다룬다.
스레드를 많이 생성하면, 모든 스레드를 스케쥴링 해야하므로, Context switching이 빈번히 발생
-> context switching의 경우 멀티 프로세싱 기법에서 모두 발생한다.(멀티프로세스+멀티스레드)
Thread vs Process프로세스는 독립적, 스레드는 프로세스의 서브셋
프로세스는 각각 독립적인 자원을 가짐, 스레드는 프로세스 자원을 공유
프로세스는 자신만의 주소영역을 가짐, 스레드는 주소영역 공유
프로세스간에는 IPC기법으로 통신, 스레드는 필요없음
Thread의 자원 공유에서 문제점이 발생(동기화 문제)
PThread POSIX 스레드(POSIX THreads, 약어: PThread
Thread 관련 표준 API